package com.totofgeek.contactsboard;

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;

import com.totofgeek.contactsboard.outils.basededonnees.BaseDeDonneesContacts;
import com.totofgeek.contactsboard.outils.utilitaires.ContactUtilitaire;

public class PrefsFragment extends PreferenceFragment implements OnPreferenceClickListener, OnPreferenceChangeListener, Runnable
{
	private static final int		RIEN		= 0;
	private static final int		INIT_BDD	= 1;
	private static final int		MAJ_BDD		= 2;
	private static final int		VIDER_BDD	= 3;

	private Preference				initBdd;
	private Preference				viderBdd;
	private Preference				majBdd;
	private Preference				tailleBadge;

	private static ProgressDialog	progresseBarre;
	private int						runnable;

	/*
	 * (non-Javadoc)
	 * 
	 * @see android.preference.PreferenceFragment#onCreate(android.os.Bundle)
	 */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.preferences);

		initBdd = (Preference) findPreference(getString(R.string.pref_init_bdd_cle));
		initBdd.setOnPreferenceClickListener(this);

		majBdd = (Preference) findPreference(getString(R.string.pref_maj_bdd_cle));
		majBdd.setOnPreferenceClickListener(this);

		viderBdd = (Preference) findPreference(getString(R.string.pref_vider_bdd_cle));
		viderBdd.setOnPreferenceClickListener(this);

		tailleBadge = (Preference) findPreference(getString(R.string.pref_widget_cle));
		tailleBadge.setOnPreferenceChangeListener(this);
		String valeurActuelle = tailleBadge.getSharedPreferences().getString(getString(R.string.pref_widget_cle), "Normale");// FIXME Faire une constante
		changerResume(tailleBadge, R.string.pref_widget_resume, valeurActuelle);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object)
	 */
	@Override
	public boolean onPreferenceChange(Preference preference, Object nouvelleValeur)
	{
		if (preference.equals(tailleBadge))
			changerResume(tailleBadge, R.string.pref_widget_resume, nouvelleValeur);

		return true;
	}

	/**
	 * @param preference
	 * @param idStringResume
	 * @param nouvelleValeur
	 */
	@SuppressLint("DefaultLocale")
	private void changerResume(Preference preference, int idStringResume, Object nouvelleValeur)
	{
		preference.setSummary(String.format(getString(idStringResume), String.valueOf(nouvelleValeur).toLowerCase()));
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see android.preference.Preference.OnPreferenceClickListener#onPreferenceClick(android.preference.Preference)
	 */
	@Override
	public boolean onPreferenceClick(Preference preference)
	{
		String titre = null;
		String message = null;

		runnable = RIEN;

		if (preference.equals(initBdd))
		{
			runnable = INIT_BDD;
			titre = getString(R.string.pb_bdd);
			message = getString(R.string.pb_init_bdd);
		}
		else if (preference.equals(majBdd))
		{
			runnable = MAJ_BDD;
			titre = getString(R.string.pb_bdd);
			message = getString(R.string.pb_maj_bdd);
		}
		else if (preference.equals(viderBdd))
		{
			runnable = VIDER_BDD;
			titre = getString(R.string.pb_bdd);
			message = getString(R.string.pb_init_bdd);
		}

		if (runnable > RIEN)
		{
			progresseBarre = ProgressDialog.show(getActivity(), titre, message, true, false);
			Thread thread = new Thread(this);
			thread.start();
		}

		return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Runnable#run()
	 */
	public void run()
	{
		switch (runnable)
		{
		case INIT_BDD:
			BaseDeDonneesContacts bdd = new BaseDeDonneesContacts(getActivity());
			bdd.clear();
			ContactUtilitaire.initialiserBaseDeDonnees(getActivity(), Boolean.TRUE);
			ContactUtilitaire.rafrachirWidgetListe();
			break;
		case MAJ_BDD:
			ContactUtilitaire.initialiserBaseDeDonnees(getActivity(), Boolean.FALSE);
			ContactUtilitaire.rafrachirWidgetListe();
			break;
		case VIDER_BDD:
			ContactUtilitaire.viderLesContacts(getActivity());
			ContactUtilitaire.rafrachirWidgetListe();
			break;

		default:
			break;
		}
		handler.sendEmptyMessage(0);
		runnable = RIEN;
	}

	private static Handler	handler	= new Handler()
									{
										/*
										 * (non-Javadoc)
										 * 
										 * @see android.os.Handler#handleMessage(android.os.Message)
										 */
										@Override
										public void handleMessage(Message msg)
										{
											progresseBarre.dismiss();
										}
									};

}
